package com.common.redis.dao;//package com.lfrzzl.frame.redis.dao;
//
//import java.util.ArrayList;
//import java.util.List;
//
//import org.apache.commons.logging.Log;
//import org.apache.commons.logging.LogFactory;
//import org.springframework.dao.DataAccessException;
//import org.springframework.data.redis.connection.RedisConnection;
//import org.springframework.data.redis.core.RedisCallback;
//import org.springframework.data.redis.serializer.RedisSerializer;
//import org.springframework.stereotype.Repository;
//import org.springframework.util.Assert;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONArray;
//import com.alibaba.fastjson.JSONObject;
//import com.lfrzzl.frame.redis.vo.RedisVo;
//
//@Repository(value = "redisDao")
//public class RedisDao extends RedisGeneratorDao<String, RedisVo>{
//
//	private Log logger = LogFactory.getLog(RedisDao.class);
//	//设置默认的DB号为0
//	public static int defaultDB = 0;
//	/**
//	 * 
//	* 方法名:  addObj
//	* 方法功能描述:    添加单个对象
//	* @param redisVo
//	* @return
//	* @return boolean    
//	* @Author:   zh
//	* @Create Date:   2017年1月19日
//	 */
//	public boolean addObj(final RedisVo redisVo){
//		return redisTemplate.execute(new RedisCallback<Boolean>() {
//			@Override
//			public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
//				RedisSerializer<String> serializer = getRedisSerializer();
//				byte[] key = serializer.serialize(redisVo.getKey());
//				byte[] value = serializer.serialize(JSONObject.toJSONString(redisVo.getValue()));
//				return connection.setNX(key, value);
//			}
//		});
//	}
//	
//	/**
//	 * 
//	* 方法名:  addObj
//	* 方法功能描述:    添加单个对象
//	* @param key
//	* @param value
//	* @return
//	* @return boolean    
//	* @Author:   zh
//	* @Create Date:   2017年1月20日
//	 */
//	public boolean addObj(final byte[] key,final byte[] value,final int db){
//		return redisTemplate.execute(new RedisCallback<Boolean>() {
//			@Override
//			public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
//				connection.select(db);
//				return connection.setNX(key, value);
//			}
//		});
//	}
//	
//	/**
//	 * 
//	* 方法名:  addList
//	* 方法功能描述:    添加集合
//	* @param lst
//	* @return
//	* @return boolean    
//	* @Author:   zh
//	* @Create Date:   2017年1月19日
//	 */
//	public boolean addList(final List<RedisVo> lst){
//		Assert.notEmpty(lst);
//		return redisTemplate.execute(new RedisCallback<Boolean>() {
//			@Override
//			public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
//				RedisSerializer<String> serializer = getRedisSerializer();
//				for(RedisVo redisVo:lst){
//					byte[] key = serializer.serialize(redisVo.getKey());
//					byte[] value = serializer.serialize(JSONObject.toJSONString(redisVo.getValue()));
//					connection.setNX(key, value);
//				}
//				return true;
//			}
//		});
//	}
//	
//	/**
//	 * 
//	* 方法名:  delete
//	* 方法功能描述:    删除对象集
//	* @param keys
//	* @return void    
//	* @Author:   zh
//	* @Create Date:   2017年1月19日
//	 */
//	public void delete(List<String> keys){
//		redisTemplate.delete(keys);
//	}
//	
//	/**
//	 * 
//	* 方法名:  delete
//	* 方法功能描述:    删除单个
//	* @param key
//	* @return void    
//	* @Author:   zh
//	* @Create Date:   2017年1月19日
//	 */
//	public void delete(String key){
//		List<String> keys = new ArrayList<String>();
//		keys.add(key);
//		delete(keys);
//	}
//	/**
//	 * 
//	* 方法名:  getObject
//	* 方法功能描述:    获取单个对象
//	* @param keyId
//	* @param cla
//	* @return
//	* @return RedisVo    
//	* @Author:   zh
//	* @Create Date:   2017年1月22日
//	 */
//	public RedisVo getObject(final String keyId,final Class<?> cla) {
//		return get(keyId, cla, false,defaultDB);
//	}
//	/**
//	 * 
//	* 方法名:  getObjectWithBlock
//	* 方法功能描述:    获取单个对象
//	* @param keyId
//	* @param cla
//	* @param block
//	* @return
//	* @return RedisVo    
//	* @Author:   zh
//	* @Create Date:   2017年1月22日
//	 */
//	public RedisVo getObjectWithBlock(final String keyId,final Class<?> cla,final int db){
//		return get(keyId, cla, false, db);
//	}
//	/**
//	 * 
//	* 方法名:  getList
//	* 方法功能描述:    获取列表对象
//	* @param keyId
//	* @param cla
//	* @return
//	* @return RedisVo    
//	* @Author:   zh
//	* @Create Date:   2017年1月22日
//	 */
//	public RedisVo getList(final String keyId,final Class<?> cla) {
//		return get(keyId, cla, true,defaultDB);
//	}
//	/**
//	 * 
//	* 方法名:  getListWithBlock
//	* 方法功能描述:    获取列表对象
//	* @param keyId
//	* @param cla
//	* @param block
//	* @return
//	* @return RedisVo    
//	* @Author:   zh
//	* @Create Date:   2017年1月22日
//	 */
//	public RedisVo getListWithBlock(final String keyId,final Class<?> cla,final int db){
//		return get(keyId, cla, true, db);
//	}
//	/**
//	 * 
//	* 方法名:  get
//	* 方法功能描述:    根据key获取value
//	* @param keyId
//	* @param cla
//	* @return
//	* @return RedisVo    
//	* @Author:   zh
//	* @Create Date:   2017年1月19日
//	 */
//	public RedisVo get(final String keyId,final Class<?> cla,final boolean isList,final int db){
//		RedisVo redisVo = redisTemplate.execute(new RedisCallback<RedisVo>() {
//			@Override
//			public RedisVo doInRedis(RedisConnection connection) throws DataAccessException {
//				RedisSerializer<String> serializer = getRedisSerializer();
//				byte[] key = serializer.serialize(keyId);
//				byte[] value = connection.get(key);
//				connection.select(db);
//				if (value == null) {
//					return null;
//				}
//				String va = serializer.deserialize(value);
//				RedisVo vo;
//				if (isList) {
//					vo = new RedisVo(keyId, JSONArray.parseArray(va, cla));
//				}else{
//					vo = new RedisVo(keyId, va.getClass().equals(cla)?va:JSON.parseObject(va, cla));
//				}
//				return vo;
//			}
//		});
//		return redisVo;
//	}
//	/**
//	 * 
//	* 方法名:  update
//	* 方法功能描述:    修改数据
//	* @param redisVo
//	* @return
//	* @return boolean    
//	* @Author:   zh
//	* @Create Date:   2017年1月19日
//	 */
//	public boolean update(final RedisVo redisVo,final int db){
//		String key = redisVo.getKey();
//		if (get(key,redisVo.getValue().getClass(),false,db) == null) {
//			logger.warn("key = "+key+",未找到数据");
//			return false;
//		}
//		return redisTemplate.execute(new RedisCallback<Boolean>() {
//			@Override
//			public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
//				RedisSerializer<String> serializer = getRedisSerializer();
//				byte[] key = serializer.serialize(redisVo.getKey());
//				byte[] value = serializer.serialize(JSONObject.toJSONString(redisVo.getValue()));
//				connection.set(key, value);
//				return true;
//			}
//		});
//	}
//	
//	public boolean update(final byte[] key,final byte[] value,final int db){
//		return redisTemplate.execute(new RedisCallback<Boolean>() {
//			@Override
//			public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
//				connection.select(db);
//				connection.set(key, value);
//				return true;
//			}
//		});
//	}
//	/**
//	 * 
//	* 方法名:  flush
//	* 方法功能描述:    清空所有空间或指定的DB
//	* @param flushAll 为true时清空所有
//	* @param dbNum
//	* @return
//	* @return boolean    
//	* @Author:   zh
//	* @Create Date:   2017年1月22日
//	 */
//	public boolean flush(final boolean flushAll,final int dbNum){
//		return redisTemplate.execute(new RedisCallback<Boolean>() {
//			@Override
//			public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
//				if (flushAll) {
//					connection.flushAll();
//				}else{
//					connection.select(dbNum);
//					connection.flushDb();
//				}
//				return true;
//			}
//		});
//	}
//	
//	/**
//	 * 
//	* 方法名:  setTimeOut
//	* 方法功能描述:    设置超时时间，单位：秒
//	* @param time
//	* @return
//	* @return boolean    
//	* @Author:   zh
//	* @Create Date:   2017年1月20日
//	 */
//	public boolean setTimeOut(final Long time){
//		return redisTemplate.execute(new RedisCallback<Boolean>() {
//			@Override
//			public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
//				// TODO Auto-generated method stub
//				return connection.exists(LongToByte(time));
//			}
//		});
//	}
//	/**
//	 * 
//	* 方法名:  LongToByte
//	* 方法功能描述:    将Long转化为byte数组
//	* @param number
//	* @return
//	* @return byte[]    
//	* @Author:   zh
//	* @Create Date:   2017年1月20日
//	 */
//	private byte[] LongToByte(Long number){
//		long temp = number; 
//        byte[] b = new byte[8]; 
//        for (int i = 0; i < b.length; i++) { 
//            b[i] = new Long(temp & 0xff).byteValue();// 将最低位保存在最低位 
//            temp = temp >> 8; // 向右移8位 
//        } 
//        return b;
//	}
//}
